本节描述了分离镜像的片外OAD(Split Image Off-Chip OAD)和片外OAD库(Library off-chip OAD)之间的差异。片外OAD利用一个外部的flash储存新的镜像在下载和镜像选择/更新期间。
以下处理过程是片外OAD独有的:
片外OAD支持分离镜像和协议栈库编译配置。这意味着用户可以在一个OAD期间更新应用程序和协议栈。Stack和stack_library镜像类型由片外OAD支持,有关每个OAD的优点的说明,请参见以下部分。
注意:外OAD分为了 Split Image Off-Chip OAD和Library Off-Chip OAD。前者是协议栈和应用程序有固定的flash边界。后者没有固定这个边界,Stack的大小是在编译之后确定的。了解TI在存储架构的设计参考存储架构
Split Image Off-Chip OAD具有以下优点:
OAD镜像的传输时间和灵活性。
开发人员可以选择使用哪种类型的OAD镜像来执行OAD。如果希望减少OAD传输时间,开发人员可以选择生成仅应用程序的OAD镜像。如果开发人员希望以额外的传输时间为代价升级应用程序以及协议栈,则可以选择生成App + Stack OAD镜像。
SimpleLink CC2640R2 SDK参考示例
在SimpleLink CC2640R2 SDK中提供了simple_peripheral_oad_offchip项目用于片外OAD的实现,以供参考。
Split Image Off-Chip OAD具有以下缺点:
Library Off-Chip OAD库具有以下优点:
Library Off-Chip OAD库具有以下缺点:
为了能正常执行片外OAD,目标系统必须包含以下几点:
需要一个额外的存储设备,至少需要128K的容量。支持多个OAD镜像文件存储,容量为n128+(nEXT_FL_PAGE_SIZE),n>=1。
空闲的GPIO口连接外部存储器(例如SPI)
足够的空间来保存BIM的第31页(4K)的全部内容(即Metadata)。
如图所示,片外OAD升级使用内部flash和外部flash共同完成。内部FLASH包含中断向量,嵌入了OAD配置文件的应用程序,BLE堆栈镜像,NV存储区域,BIM和CCFG。
外部存储使用的是512KB的flash。最多能保存3个OAD镜像和3个与OAD镜像相对应的元数据。这部分代码可以在ext_flash_layout.h中看见。每个image占位大小为128KB,每一个镜像(仅限APP或APP+Stack)必须支持OAD配置文件,也就是必须支持OAD功能,以便在复制到片内flash上后进一步启用OAD。
红色区域是永久驻留在flash上的,不会通过OAD进行升级。通过BIM进行镜像选择。防止升级失败后使用一个错误的OAD升级文件。
警告BIM将链接CCFG,CCFG用户可以配置,通过写入IMAGE_VALID_CONF为0x1F000,意味着程序启动后自动执行BIM部分代码而不是应用程序代码。BIM将会启动应用程序代码,OAD应用程序部分不需要包含CCFG,这是CC2640R2F的特性,也是也CC2650的区别。
BIM要求在OAD升级中驻留在FLASH中,以便提供一个故障检测机制,用于确定时候运行现有的应用程序镜像还是从外部flash中拷贝新的镜像到内部flash中。当有新的镜像存在在外部FLASH中,BIM对镜像进行CRC校验,如果CRC校验通过,并且没有定义NO_COPY宏,BIM将新的镜像复制到内部flash中,如果定义了NO_COPY宏,BIM将不会加载任何新镜像。
本节使用IAR进行开箱即用的演示
按照上面步骤即可进行Split Image Off-Chip OAD升级,如果有疑问可以参考附录部分。
注意:在BTool选升级文件的时候确保选在*_oad.bin文件,因为此文件包含元数据。默认情况下,这些文件可以在\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral_oad_offchip\tirtos\iar\app\FlashROM_OAD_Offchip\Exe下找到。
注意:OAD成功后,可能需要重启设备才能再次广播。
本节演示如何通过修改Simple_Peripheral添加OAD功能,并且Simple_Peripheral是一个典型的Library Off-Chip程序。
注意:可以在 \source\ti\ble5stack\profiles\oad\cc26xx中找到这些文件。
在C/C++ Compiler中添加下面宏定义。
添加OAD_IMG_A=1到您的pre-build。
该命令在编译后执行,生成bin文件,也就是OAD升级中需要的文件。经过以上步骤即可完成在现有项目中添加OAD功能。编译通过后可直接下载进入开发板,然后修改步骤6和步骤7中的HAL_IMAGE_A为HAL_IMAGE_B,OAD_IMG_A=1为OAD_IMG_B=1。生成对应的镜像文件之后使用BTool工具下载最新的固件。下载步骤参考<a href="....\oad\appendix\appendix.html>附录部分。
文章所有代码、工具、文档开源。加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5.0。